export default {
  "/blogs/web/html": [
    {
      text: "HTML",
      children: [
        "/blogs/web/html/前端 HTMLHTML5 核心标签和属性.md",
        "/blogs/web/html/HTMLHTML5 标签基础语法.md",
        "/blogs/web/html/HTMLHTML5 常用标签和属性.md",
      ],
    },
  ],
  "/blogs/web/css": [
    {
      text: "CSS/CSS3核心",
      children: ["/blogs/web/css/前端 CSS、CSS3 核心样式和属性.md"],
    },
    {
      text: "CSS/CSS3",
      children: [
        "/blogs/web/css/CSS 基础认知 和 选择器.md",
        "/blogs/web/css/CSS 文本和字体属性、列表属性.md",
        "/blogs/web/css/CSS 盒子模型.md",
        "/blogs/web/css/CSS display 属性、背景属性、其他常用属性.md",
        "/blogs/web/css/CSS 三大特性：继承、层叠性、优先级.md",
        "/blogs/web/css/浮动、BFC 规范、清除浮动的最佳实践.md",
        "/blogs/web/css/CSS 定位、层叠顺序、层叠上下文.md",
        "/blogs/web/css/margin 负值的最佳实践.md",
        "/blogs/web/css/圆角、阴影、文本图像处理、CSS 函数.md",
        "/blogs/web/css/transition 过渡动画与 animation 自定义动画.md",
        "/blogs/web/css/transform 2D 与 3D 转换.md",
      ],
    },
    {
      text: "项目解决方案",
      children: ["/blogs/web/css/防御式编程 - 防御式 CSS.md"],
    },
  ],
  "/blogs/web/javascript": [
    {
      text: "javascript核心基础",
      children: [
        "/blogs/web/javascript/JavaScript 简介、核心语法、变量.md",
        "/blogs/web/javascript/JavaScript 数据类型和类型转换.md",
        "/blogs/web/javascript/JavaScript 表达式、操作符、位运算符.md",
        "/blogs/web/javascript/JavaScript 流程控制语句 和 算法.md",
        "/blogs/web/javascript/JavaScript 数组应用 和 算法.md",
        "/blogs/web/javascript/JS 函数、作用域（链）、变量函数提升、算法核心.md",
        "/blogs/web/javascript/深入 JavaScript 数组相关方法 和 API.md",
        "/blogs/web/javascript/JavaScript 算法，大厂前端面试真题.md",
      ],
    },
    {
      text: "javascript核心重点",
      children: [
        "/blogs/web/javascript/JavaScript 面向对象，原型和原型链.md",
        "/blogs/web/javascript/JavaScript DOM 事件，事件流，事件对象，事件委托.md",
        "/blogs/web/javascript/JavaScript DOM 样式 与 节点操作.md",
        "/blogs/web/javascript/JavaScript 定时器、延时器、CSS3 动画事件，防抖节流.md",
        "/blogs/web/javascript/JavaScript 鼠标事件 和 HTML5 拖拽事件的综合应用.md",
        "/blogs/web/javascript/JavaScript BOM 核心 Window 对象属性、方法、事件.md",
        "/blogs/web/javascript/defineProperty 方法，JS 公有、私有、静态，栈和队列.md",
        "/blogs/web/javascript/JavaScript 继承的 6 种方式、应用场景，内置构造函数.md",
        "/blogs/web/javascript/JavaScript 三大包装类 Number、String、Boolean.md",
        "/blogs/web/javascript/JS 的 Math 与 Date 对象，手写活动倒计时、日历组件.md",
        "/blogs/web/javascript/JavaScript 正则表达式从入门到实践，正则相关工具.md",
        "/blogs/web/javascript/JavaScript 核心基础，阶段测试题.md",
      ],
    },
    {
      text: "javascript底层原理",
      children: [
        "/blogs/web/javascript/JavaScript 执行原理、闭包、垃圾回收、立即执行函数.md",
        "/blogs/web/javascript/JavaScript 错误处理、LHS 左查询、RHS 右查询.md",
      ],
    },
  ],
  "/blogs/web/vue/": [
    {
      text: "vue基础",
      children: [
        "/blogs/web/vue/Vue 基础 - 模板语法、事件处理、计算属性、侦听器.md",
        "/blogs/web/vue/Vue 基础 - 表单、样式绑定，条件、列表渲染、指令.md",
        "/blogs/web/vue/Vue 生命周期、自定义指令、模板引用的原理与实践.md",
      ],
    },
    {
      text: "组件通信",
      children: [
        "/blogs/web/vue/Vue 单文件组件，父子组件间传值、通信，透传属性.md",
        "/blogs/web/vue/Vue 插槽 Slots，自定义弹窗、高级列表组件，依赖注入.md",
        "/blogs/web/vue/Vue 兄弟组件间通信、发布与订阅，动态、异步组件.md",
      ],
    },
    {
      text: "组合式API",
      children: [
        "/blogs/web/vue/Vue 组合式 API - setup、reactive 与 ref，响应式工具.md",
        "/blogs/web/vue/Vue 组合式 API - watch 和 watchEffect、自定义指令.md",
        "/blogs/web/vue/Vue 组合式 API - ref，通信 API，依赖注入，生命周期.md",
      ],
    },
    {
      text: "路由和导航守卫",
      children: [
        "/blogs/web/vue/Vue Router 路由，前后端路由原理 与 具体实现.md",
        "/blogs/web/vue/Vue Router 路由传参、别名、匹配语法、编程式导航.md",
        "/blogs/web/vue/Vue Router 导航守卫、过渡与滚动、懒加载、动态路由.md",
      ],
    },
    {
      text: "Pinia",
      children: [
        "/blogs/web/vue/Pinia 全局状态管理，深入 State、Getter、Action.md",
      ],
    },
    {
      text: "其他",
      children: [
        "/blogs/web/vue/Vue 渲染机制 - 虚拟 DOM，render、h 函数，渲染流程.md",
        "/blogs/web/vue/Vue 中 Transition 和 TransitionGroup 组件，实践应用.md",
        "/blogs/web/vue/Vue 插件开发，Element Plus、VantUI 组件库实践应用.md",
        "/blogs/web/vue/Vue 中的 Teleport 内置组件.md",
      ],
    },
    {
      text:"Vue3技术揭秘",
      children:[
        '1 开篇词：Vue3和Vue2.md',
        '2 渲染器：组件是如何被渲染成 DOM 的？.md',
        '3 渲染器：数据访问是如何被代理的？.md',
        '4 渲染器：组件是如何完成更新的？.md',
        '5 渲染器：数组子节点的 diff 算法.md',
        '6 响应式原理：基于 Proxy 的响应式是什么样的？.md',
        '7 响应式原理：副作用函数探秘.md',
        '8 响应式原理：Vue 3 的 nextTick ？.md',
        '9 响应式原理：watch 函数的实现原理.md',
        '10 响应式原理：computed 函数和普通函数有什么不同？.md',
        '11 响应式原理：依赖注入实现跨级组件数据共享.md',
        '12 编译器：模板是如何被编译成 AST 的？.md',
        '13 编译器：AST 是如何被转换成 JS AST 的？.md',
        '14 编译器：JS AST 是如何生成渲染函数的？.md',
        '15 编译器：编译过程中的优化细节.md',
        '16 内置组件：Transition 是如何实现的？.md',
        '17 内置组件：KeepAlive 保活的原理.md',
        '18 内置组件：Teleport 是如何实现选择性挂载的？.md',
        '19 内置组件：Suspense 原理与异步.md',
        '20 特殊元素&指令：双向绑定是如何实现的？.md',
        '21 特殊元素&指令：slot 插槽元素是如何实现的？.md',
        '22 结语：再回首，纵观 Vue 3 实现.md',
      ]
    }
  ],
  "/blogs/web/typescript/": [
    {
      text: "TypeScript 核心基础",
      children: [
        "/blogs/web/typescript/TypeScript 快速入门 - 核心基础，TS 基本数据类型.md",
        "/blogs/web/typescript/TypeScript 数组、元组，any、unknown、never 类型.md",
        "/blogs/web/typescript/TypeScript 函数类型、symbol 类型、对象类型.md",
        "/blogs/web/typescript/TypeScript 中 Enum 枚举类型、interface 接口类型.md",
        "/blogs/web/typescript/TS 中 class 类型，泛型，类型断言核心基础 与 实践应用.md",
        "/blogs/web/typescript/TS 的类型检查机制，类型兼容性、保护机制、高级类型.md",
        "/blogs/web/typescript/TS 模块，namespace 命名空间，declare 关键字.md",
        "/blogs/web/typescript/TypeScript 类型运算符，类型映射，类型工具.md",
        "/blogs/web/typescript/TypeScript 注释指令，tsconfig.json，tsc 命令行编辑器.md",
      ],
    },
    {
      text: "TypeScript 工程实践",
      children: [
        "/blogs/web/typescript/TS 工程实践，构建工具，模块系统，编写类型声明文件.md",
        "/blogs/web/typescript/TS 工程实践中的编译工具，代码检查工具，单元测试.md",
      ],
    },
  ],
  "/blogs/web/applet/": [
    {
      text: "微信小程序",
      children: [
        "/blogs/web/applet/微信小程序发展史、开发环境准备、团队协作上线流程.md",
        "/blogs/web/applet/小程序项目结构、配置层、视图层、逻辑层、宿主环境.md",
        "/blogs/web/applet/微信小程序视图层的组件、数据绑定，列表、条件渲染.md",
        "/blogs/web/applet/微信小程序页面导航、传参、事件、API、网络请求.md",
        "/blogs/web/applet/微信小程序的生命周期、生命周期函数 与 实践应用.md",
        "/blogs/web/applet/前后端分离架构 VS 传统架构，行业最佳实践.md",
        "/blogs/web/applet/微信小程序自定义组件，核心基础 和 实践应用.md",
        "/blogs/web/applet/微信小程序自定义组件封装，项目最佳实践综合应用.md",
        "/blogs/web/applet/JS 面向对象，代码分层架构设计实践 与 网络请求封装.md",
        "/blogs/web/applet/JS 面向对象、分层设计、动态数据遍历最佳实践与应用.md",
        "/blogs/web/applet/小程序节流防抖，骨架屏功能、用户体验优化与实践.md",
        "/blogs/web/applet/小程序 npm 支持，状态管理，分包，自定义 tabBar.md",
        "/blogs/web/applet/微信小程序云开发实现注册登录 与 多终端常见登录方式.md",
      ],
    },
  ],
  "/blogs/web/ajax/": [
    {
      text: "网络请求，前后端通信",
      children: [
        "/blogs/web/ajax/前后端数据交互 与 HTTP 协议.md",
        "/blogs/web/ajax/本地存储 Cookie、localStorage、sessionStorage 实践.md",
        "/blogs/web/ajax/JSON、Ajax、跨域请求、XHR 对象、Axios 与 Fetch.md",
      ],
    },
  ],
  "/blogs/web/es6/": [
    {
      text: "ES6核心基础",
      children: [
        "/blogs/web/es6/ECMAScript、ES6 简史，let、const、var 区别和应用.md",
        "/blogs/web/es6/Symbol、BigInt、模板字符串的应用场景和底层原理.md",
        "/blogs/web/es6/ES6 箭头函数 和 对象自面量增强，大厂面试真题解析.md",
        "/blogs/web/es6/ES6 解构赋值，函数参数默认值，在项目中的应用场景.md",
        "/blogs/web/es6/ES6 剩余参数 和 展开运算符在实际开发中的应用.md",
        "/blogs/web/es6/Set、WeakSet、Map 数据结构的应用及面试真题解析.md",
        "/blogs/web/es6/Class 类的属性、方法、继承、构造函数及解决方案.md",
        "/blogs/web/es6/设计模式 - 迭代器模式和 Iterator 遍历器与 for...of 循环.md",
        "/blogs/web/es6/ES6 字符串、数组、对象的新增方法和常见应用.md",
        "/blogs/web/es6/Generator 函数的实践与实践应用.md",
        "/blogs/web/es6/Promise 用法、实例方法、原理与异步编程的实践应用.md",
        "/blogs/web/es6/JavaScript 中的 Event Loop 事件循环、微任务与宏任务.md",
        "/blogs/web/es6/ES6 Module 模块系统.md",
      ],
    },
  ],
  "/blogs/web/webpack/": [
    {
      text: "webpack核心原理应用实践",
      children: [
        "第01章—重新认识Webpack：旧时代的破局者.md",
        "第02章—如何理解Webpack配置底层结构逻辑.md",
        "第03章—如何借助Babel+TS+ESLint构建现代JS工程环境.md",
        "第04章—如何借助预处理器、PostCSS等构建现代CSS工程环境.md",
        "第05章—如何搭建Vue全栈开发环境.md",
        "第06章—如何搭建React全栈开发环境.md",
        "第07章—使用Webpack构建NPMLibrary的正确方式.md",
        "第08章—使用Webpack构建微前端应用.md",
        "第09章—如何借助Webpack开发PWA、Node、Electron应用.md",
        "第10章—深入理解图像加载原理与最佳实践.md",
        "第11章—深入理解Webpack核心配置结构.md",
        "第12章—构建性能：分享7款常用的性能分析工具.md",
        "第13章—如何使用Webpack持久化缓存大幅提升构建性能.md",
        "第14章—Webpack都有哪些实现并行构建的方法.md",
        "第15章—有哪些值得学习的构建性能极致优化技巧.md",
        "第16章—如何正确使用SplitChunks提升应用性能.md",
        "第17章—不止Terser：揭秘代码压缩的门门道道.md",
        "第18章—还有哪些值得学习的应用性能极致优化技巧.md",
        "第19章—Loader开发基础：从开源项目学到的Loader开发技巧.md",
        "第20章—Loader开发进阶：如何用好Loader扩展开发工具.md",
        "第21章—插件开发基础：实例剖析插件基本形态与架构逻辑.md",
        "第22章—插件开发进阶：如何提升插件健壮性.md",
        "第23章—插件架构：Hook体系是如何影响Webpack架构的.md",
        "第24章—Init、Make、Seal：真正读懂Webpack核心流程.md",
        "第25章—DependencyGraph：如何管理模块间依赖.md",
        "第26章—Chunk：三种产物的打包逻辑.md",
        "第27章—Runtime：模块编译打包及运行时逻辑.md",
        "第28章—Tree-shaking：如何删除无用模块导出.md",
        "第29章—Sourcemap：源码映射原理与应用技巧",
        "第30章—HMR：如何动态替换页面代码",
      ],
    },
  ],
  "/blogs/web/vite/": [
    {
      text:"vite核心基础",
      children:["README.md"]
    },  
    {
      text: "深入浅出Vite",
      children: [
        "第01章—开篇：让Vite助力你的前端工程化之路.md",
        "第02章—模块标准：为什么ESM是前端模块化的未来.md",
        "第03章—快速上手：如何用Vite从零搭建前端项目.md",
        "第04章—样式方案：在Vite中接入现代化的CSS工程化方案.md",
        "第05章—代码规范：如何利用Lint工具链来保证代码风格和质量.md",
        "第06章—静态资源：如何在Vite中处理各种静态资源.md",
        "第07章—预构建：如何玩转秒级依赖预构建的能力.md",
        "第08章—双引擎架构：Vite是如何站在巨人的肩膀上实现的.md",
        "第09章—得力的性能推手：Esbuild功能使用与插件开发实战.md",
        "第10章—Vite构建基石(上)——Rollup打包基本概念及使用.md",
        "第11章—Vite构建基石(下)——深入理解Rollup的插件机制.md",
        "第12章—插件开发与实战：如何开发一个完整的Vite插件.md",
        "第13章—HMRAPI及原理：代码改动后，如何进行毫秒级别的局部更新.md",
        "第14章—代码分割：打包完产物体积太大，怎么拆包.md",
        "第15章—语法降级与Polyfill：联合前端编译工具链，消灭低版本浏览器兼容问题.md",
        "第16章—预渲染：如何借助Vite搭建高可用的服务端渲染(SSR)工程.md",
        "第17章—模块联邦：如何实现优雅的跨应用代码共享.md",
        "第18章—再谈ESM：高阶特性&PureESM时代.md",
        "第19章—性能优化：如何体系化地对Vite项目进行性能优化.md",
        "第20章—配置解析服务：配置文件在Vite内部被转换成什么样子了.md",
        "第21章—依赖预构建：Esbuild打包功能如何被Vite玩出花来.md",
        "第22章—插件流水线：从整体到局部，理解Vite的核心编译能力.md",
        "第23章—热更新：基于ESM的毫秒级HMR的实现揭秘.md",
        "第24章—手写Vite：实现no-bundle开发服务(上).md",
        "第25章—手写Vite：实现no-bundle开发服务(下)",
        "第26章—手写Bundler：实现JavaScriptAST解析器——词法分析、语义分析.md",
        "第27章—手写Bundler：实现代码打包、TreeShaking.md",
        "第28章—加餐：Vite3.0核心更新盘点与分析.md",
      ],
    },
  ],
  "/blogs/algorithm/": [
    {
      text: "二叉树",
      children: ["/blogs/algorithm/二叉树.md"],
    },
    {
      text: "数组字符串",
      children: ["/blogs/algorithm/数组字符串.md"],
    },
  ],
};
